package com.tl.spider.service;

import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import com.tl.spider.config.Config;
import com.tl.spider.dao.NewsDataDao;
import com.tl.spider.pojo.ParserPojo;
import com.tl.spider.pojo.UrlTaskPojo;
import com.tl.spider.pojo.WebPagePojo;
import com.tl.spider.service.download.DownloadManager;
import com.tl.spider.service.parser.ParserManager;
import com.tl.spider.service.statistic.StatisticManager;

/**
 * 任务执行类
 * 
 * @date 2021年7月20日
 * @author Antg
 */
public class TaskService {
	/**
	 * 全量爬取
	 * 
	 * @param list
	 * @date 2021年7月20日
	 * @author Antg
	 */
	public static void excuteFull(List<UrlTaskPojo> list) {
		list.forEach(ele -> {
			try {
				// 下载网页
				WebPagePojo webPagePojo = DownloadManager.download(ele);
				// 解析网页
				List<ParserPojo> parserPojoList = ParserManager
						.parser(webPagePojo);
				// 持久化
				NewsDataDao.insert(parserPojoList);
				// 控制台输出提示
				System.out.println("页面-->" + ele.getUrl() + "-->爬取成功");
			} catch (Exception e) {
				e.printStackTrace();
			}
		});
	}

	/**
	 * 增量爬取
	 * 
	 * @param list
	 * @date 2021年7月20日
	 * @author Antg
	 */
	public static void excuteIncrement(List<UrlTaskPojo> list) {
		list.forEach(ele -> {
			try {
				// 下载网页
				WebPagePojo webPagePojo = DownloadManager.download(ele);
				// 解析网页
				List<ParserPojo> parserPojoList = ParserManager
						.parser(webPagePojo);
				// 持久化
				NewsDataDao.insertWithUniq(parserPojoList);
				// 控制台输出提示
				System.out.println("页面-->" + ele.getUrl() + "-->爬取成功");
			} catch (Exception e) {
				e.printStackTrace();
			}
		});
	}

	/**
	 * 获取日志
	 * 
	 * @date 2021年7月20日
	 * @author Antg
	 */
	public static void getLog() {
		System.out.println("总爬取数量--->" + StatisticManager.getAllNum());
		System.out.println("当日爬取数量--->" + StatisticManager.getDayNum());
	}

	/**
	 * 
	 * 定时爬取
	 * 
	 * @date 2021年7月20日
	 * @author Antg
	 */
	public static void excuteWithTimer(List<UrlTaskPojo> list) {
		Timer timer = new Timer();
		timer.schedule(new TimerTask() {
			@Override
			public void run() {
				System.out.println("----->定时增量爬取<----");
				// 定时增量爬取
				excuteIncrement(list);
				System.out.println("----->定时增量爬取结束<----");
			}
		}, Config.timer_task_time_out, Config.timer_task_time_out);
	}
}
